//
// Created by Administrator on 2020/7/9.
//T5章:数组、指针与字符串
//指针的概念、定义和指针运算
/*
//内存空间的访问方式:通过变量名访问、通过地址访问
//指针的概念:1.指针(内存地址,用于间接访问内存单元)2.指针变量(用于存放地址的变量)
//例:
static int i;
static int* ptr=&i;//ptr指针里存放变量i的地址
//图示:
//地址(2000)----内存用户数据区()---变量i
//地址(3010)----内存用户数据区(2000)---变量ptr

*ptr=3;
//图示:
//地址(2000)----内存用户数据区(3)---变量i
//地址(3010)----内存用户数据区(2000)---变量ptr



//与地址相关的运算————”*“和”&“
//指针运算符：*
//地址运算符：&
//两者互为逆运算
*/


//T5章:数组、指针与字符串
//指针的初始化和赋值
//指针的初始化:
//          语法形式:存储类型 数据类型 *指针名=初始地址;
//eg:int *pa=&a;
//指针变量的赋值
//          语法形式:指针名=地址
//空指针:nullptr或者0
//eg:
//-------------main.cpp--------------//
#include <iostream>
using namespace std;
int main()
{
    int i;//定义int型数i
    int *ptr=&i;//取i的地址赋给ptr
    i=10;//int型数赋初值
    cout<<"i="<<i<<endl;//输出int型数的值
    cout<<"*ptr="<<*ptr<<endl;//输出int型指针所指地址的内容
    return 0;
}
//-------------void指针定义与使用--------------//
#include <iostream>
using namespace std;
int main()
{
    //!void voidObject;错,不能声明void类型的变量
    void *pv;//对,可以声明void类型的指针(无类型的指针)
    int i=5;
    pv=&i;//void类型指针指向整型变量
    int *pint= static_cast<int*>(pv);//void指针转换为int指针
    cout<<"*pint="<<*pint<<endl;
    return 0;
}
//指向常量的指针:const指针
//eg:int a;
//   const int *p1=&a;//p1是指向常量的指针
//   int b;
//   p1=&b;//正确,p1本身的值可以改变
//   *p1=1;//错误,不能通过p1改变所指向的对象


//指针类型的常量
//若申明指针常量,则指针本身的值不能被改变
//eg:int a;
//   int* const p2=&a;
//   p2=&b;//错误,p2是指针常量,值不能改变